import {
  getToken,
  setToken,
  removeToken,
  setTimeOfToken,
  setMobile,
  getMobile,
  removeMobile
} from '@/utils/auth'
import { login, getUserInfo } from '@/api/user'

const state = {
  token: getToken() || '', // 从本地获取token
  mobile: getMobile() || '', // 单独设置一个手机号， 来获取用户信息
  userInfo: {}
}
const mutations = {
  setToken(state, value) {
    state.token = value.token
    state.mobile = value.mobile
    setToken(value.token) // 持久化
    setMobile(value.mobile)
  },
  removeToken(state) {
    state.token = ''
    state.mobile = ''
    // 本地缓存
    removeToken()
    removeMobile()
  },
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo // 留个伏笔，这里要用{userInfo}前拷贝的方式，去赋值对象，这样才能在数据更新之后，触发组件的更新
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(context, userInfo) {
    // 请求数据
    const result = await login(userInfo)
    // 保存token获取的时间
    if (!result) {
      return Promise.reject(new Error('用户名密码错误'))
    }
    setTimeOfToken()
    // 将获取的token，保存到vuex
    context.commit('setToken', result[0])
  },
  // 获取用户信息
  async getUserInfo(context) {
    const res = await getUserInfo(context.state.mobile)
    context.commit('setUserInfo', ...res)
  },
  logout(context) {
    context.commit('removeToken')
    context.commit('removeUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
